# 05μ₯ νλ
Assembled by GimunLee
# νλ κ°λ
- μΏ λ²λ€ν°μ€λ νλλΌλ λ¨μλ‘ μ»¨ν μ΄λλ₯Ό λ¬Άμ΄μ κ΄λ¦¬νλ―λ‘ λ³΄ν΅ μ»¨ν μ΄λ νλκ° μλ μ¬λ¬ κ° μ»¨ν μ΄λλ‘ κ΅¬μ±
- νλλ‘ μ»¨ν μ΄λ μ¬λ¬ κ°λ₯Ό νκΊΌλ²μ κ΄λ¦¬ν λλ 컨ν μ΄λλ§λ€ μν μ λΆμ¬ν μ μμ
- νλ νλμ μν 컨ν μ΄λλ€μ λͺ¨λ λ Έλ νλ μμμ μ€ν
- νλμ μν μ€ νλλ 컨ν μ΄λλ€μ΄ κ°μ λͺ©μ μΌλ‘ μμμ 곡μ νλλ‘ νλ κ²
- νλ μμ μλ 컨ν μ΄λλ€μ IP νλλ₯Ό 곡μ
# νλ μ¬μ©νκΈ°
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-simple-pod # νλ μ΄λ¦ μ€μ
labels:
app: kubernetes-simple-pod # μ€λΈμ νΈλ₯Ό μλ³νλ λ μ΄λΈμ μ€μ
spec:
containers:
- name: kubernetes-simple-pod # 컨ν
μ΄λ μ΄λ¦ μ€μ
image: arisu1000/simple-container-app:latest # 컨ν
μ΄λμ μ¬μ©ν μ΄λ―Έμ§ μ€μ
ports:
- containerPort: 8080 # ν΄λΉ 컨ν
μ΄λμ μ μν ν¬νΈ
# νλ μλͺ μ£ΌκΈ°
- Pending: μΏ λ²λ€ν°μ€ μμ€ν μ νλλ₯Ό μμ±νλ μ€μμ λ»ν¨.
- Running: νλ μ λͺ¨λ 컨ν μ΄λκ° μ€ν μ€μΈ μνλ‘ 1κ° μ΄μμ 컨ν μ΄λκ° μ€ν μ€μ΄κ±°λ μμ λλ μ¬μμ μν
- Succeeded: νλ μ λͺ¨λ 컨ν μ΄λκ° μ μ μ€ν μ’ λ£λ μνλ‘ μ¬μμλμ§ μμ
- Failed: νλ μ λͺ¨λ 컨ν μ΄λ μ€ μ μμ μΌλ‘ μ€ν μ’ λ£λμ§ μμ 컨ν μ΄λκ° μλ μν
- Unknown: νλμ μνλ₯Ό νμΈν μ μλ μνλ‘ λ³΄ν΅ νλκ° μλ λ Έλμ ν΅μ ν μ μμ λλ₯Ό λ»ν¨
# νλ μλͺ μ£ΌκΈ° νμΈ
$ kubectl describe pods kubernetes-simple-pod
# μλ΅
Condition:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
- Initialized: λͺ¨λ μ΄κΈ°ν 컨ν μ΄λκ° μ±κ³΅μ μΌλ‘ μμ μλ£
- Ready: νλλ μμ²λ€μ μ€νν μ μκ³ μ°κ²°λ λͺ¨λ μλΉμ€μ λ‘λλ°Έλ°μ νμ μΆκ°λμ΄μΌ νλ€λ λ»
- ContainersReady: νλ μ λͺ¨λ 컨ν μ΄λκ° μ€λΉ μνλΌλ λ»
- PodScheduled: νλκ° νλμ΄ λ Έλλ‘ μ€μΌμ€μ μλ£νλ€λ λ»
- Unschedulable: μ€μΌμ€λ¬κ° μμμ λΆμ‘±μ΄λ λ€λ₯Έ μ μ½ λ±μΌλ‘ μ§κΈ λΉμ₯ νλλ₯Ό μ€μΌμ€ν μ μλ€λ λ»
# kubeletμΌλ‘ 컨ν μ΄λ μ§λ¨νκΈ°
kubeletμ΄ μ»¨ν μ΄λλ₯Ό μ£ΌκΈ°μ μΌλ‘ μ§λ¨νλλ°, μ΄λ νμν νλ‘λΈ(Probe)μλ λ κ°μ§ μ‘΄μ¬
- livenessProbe: 컨ν μ΄λκ° μ€νλλμ§ νμΈ. μ΄ μ§λ¨μ΄ μ€ν¨νλ©΄ kubeletμ 컨ν μ΄λλ₯Ό μ’ λ£μν€κ³ , μ¬μμ μ μ± μ λ°λΌμ 컨ν μ΄λλ₯Ό μ¬μμ
- readinessProbe: 컨ν μ΄λκ° μ€νλ ν μ€μ λ‘ μλΉμ€ μμ²μ μλ΅ν μ μλμ§ μ§λ¨. μ΄ μ§λ¨μ΄ μ€ν¨νλ©΄ μλν¬μΈνΈ 컨νΈλ‘€λ¬λ ν΄λΉ νλμ μ°κ²°λ λͺ¨λ μλΉμ€λ₯Ό λμμΌλ‘ μλν¬μΈ μ 보λ₯Ό μ κ±°
readinessProbeλ₯Ό μ§μνλ 컨ν μ΄λλΌλ©΄ 컨ν μ΄λκ° μ€νλ λ€μ λ°λ‘ μλΉμ€μ ν¬μ λμ΄μ νΈλν½μ λ°μ§ μκ³ , μ€μ νΈλν½μ λ°μ μ€λΉκ° λμμμ νμΈν ν νΈλν½μ λ°μ
# μ΄κΈ°ν 컨ν μ΄λ
- μ΄κΈ°ν 컨ν μ΄λλ μ± μ»¨ν μ΄λκ° μ€νλκΈ° μ νλ μ΄κΈ°ν
- 보μμ μ΄μ λ‘ μ± μ»¨ν μ΄λ μ΄λ―Έμ§μ κ°μ΄ λλ©΄ μ λλ μ±μ μμ€ μ½λλ₯Ό λ³λλ‘ κ΄λ¦¬ν λ μ μ©
# νΉμ§
- μ΄κΈ°ν 컨ν μ΄λ μ¬λ¬ κ° κ΅¬μ± κ°λ₯
- μ΄κΈ°ν 컨ν μ΄λ μ€νμ΄ μ€ν¨νλ©΄ μ±κ³΅ν λ κΉμ§ μ¬μμ
- μ΄κΈ°ν 컨ν μ΄λκ° λͺ¨λ μ€νλ ν μ± μ»¨ν μ΄λ μ€ν μμ
- νλκ° λͺ¨λ μ€λΉλκΈ° μ μ μ€νν ν μ’ λ£λλ 컨ν μ΄λμ΄κΈ° λλ¬Έμ readinessaProbeλ₯Ό μ§μνμ§ μμ
# νλ μΈνλΌ μ»¨ν μ΄λ
- μΏ λ²λ€ν°μ€μλ λͺ¨λ νλμμ νμ μ€νλλ pauseλΌλ 컨ν μ΄λκ° μ‘΄μ¬νλλ° μ΄ pauseλ₯Ό 'νλ μΈνλΌ μ»¨ν μ΄λ'λΌκ³ ν¨
- pauseλ νλ μ κΈ°λ³Έ λ€νΈμν¬λ‘ μ€νλλ©°, νλ‘μΈμ€ μλ³μκ° 1(PID 1)λ‘ μ€μ λλ―λ‘ λ€λ₯Έ 컨ν μ΄λμ λΆλͺ¨ 컨ν μ΄λ μν μ ν¨
# μ€νν± νλ
- kube-apiseverλ₯Ό ν΅νμ§ μκ³ kubeletμ΄ μ§μ μ€ννλ νλλ€μ΄ μ‘΄μ¬νλλ° μ΄λ₯Ό μ€νν± νλλΌκ³ ν¨
- λ³΄ν΅ μ€νν± νλλ kube-apiserverλΌλκ° etcd κ°μ μμ€ν νλλ₯Ό μ€ννλ μ©λλ‘ λ§μ΄ μ¬μ©
- μΏ λ²λ€ν°μ€μμ νλλ₯Ό μ€ννλ €λ©΄ kube-apiserverκ° νμνλ° kube-apiserver μ체λ₯Ό μ²μ μ€ννλ λ³λμ μλ¨μΌλ‘ μ€νν± νλ μ΄μ©
# νλμ CPUμ λ©λͺ¨λ¦¬ μμ ν λΉ
- λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ² κΈ°λ°μΌλ‘ μ¬λ¬ κ° μμ νλ‘μΈμ€λ₯Ό μ€ννλ©΄ λ Έλ νλμ μ¬λ¬ κ° νλλ₯Ό μ€ννλ μΌμ΄ μ‘΄μ¬
- νλμλ CPUμ λ©λͺ¨λ¦¬λ₯Ό λμμΌλ‘ μμ μ¬μ©λμ μ€μ νλλ‘
.limit
μ.request
νλλ₯Ό μ€λΉν΄λμμ
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-simple-pod
labels:
app: kubernetes-simple-pod
spec:
containers:
- name: kubernetes-simple-pod
image: arisu1000/simple-container-app:latest
resources:
requests: # μ΅μ μμ μꡬλ
cpu: 0.1
memory: 200M
limits: # μ΅λ μ¬μ© κ°λ₯λ
cpu: 0.5 # CPU μ½μ΄ μ°μ° λ₯λ ₯ κΈ°μ€
memory: 1G # λ°μ΄νΈ λ¨μλ‘ μΈ‘μ λλ©°, λ¨μ μ©λ κΈ°νΈ μ¬μ©κ°λ₯
ports:
- containerPort: 8080
# νλμ νκ²½ λ³μ μ€μ νκΈ°
- 컨ν μ΄λλ₯Ό μ¬μ©ν λμ μ₯μ μ€ νλλ κ°λ° νκ²½μμ λ§λ 컨ν μ΄λμ νκ²½ λ³μλ§ λ³κ²½ν΄ μ€μ νκ²½μμ μ€ννλλΌλ κ°λ° νκ²½μμ λμνλ κ·Έλλ‘ λμνλ€λ μ
apiVersion: v1
kind: Pod
metadata:
name: kubernetes-simple-pod
labels:
app: kubernetes-simple-pod
spec:
containers:
- name: kubernetes-simple-pod
image: arisu1000/simple-container-app:latest
ports:
- containerPort: 8080
env:
- name: TESTENV01
value: "testvalue01"
- name: HOSTNAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: CPU_REQUEST
valueFrom:
resourceFieldRef:
containerName: kubernetes-simple-pod
resource: requests.cpu
- name: CPU_LIMIT
valueFrom:
resourceFieldRef:
containerName: kubernetes-simple-pod
resource: limits.cpu
# νλ κ΅¬μ± ν¨ν΄
- νλλ‘ μ¬λ¬ κ°μ 컨ν μ΄λλ₯Ό λ¬Άμ΄μ ꡬμ±νκ³ μ€νν λ λͺκ°μ§ ν¨ν΄ μ μ© κ°λ₯
# μ¬μ΄λμΉ΄ ν¨ν΄
- μ¬μ΄λμΉ΄ ν¨ν΄μ μλ μ¬μ©νλ €λ κΈ°λ³Έ 컨ν μ΄λμ κΈ°λ₯μ νμ₯νκ±°λ κ°ννλ μ©λμ 컨ν μ΄λλ₯Ό μΆκ°νλ κ²
- κΈ°λ³Έ 컨ν μ΄λλ μλ λͺ©μ μ κΈ°λ₯μλ§ μΆ©μ€νλλ‘ κ΅¬μ±νκ³ , λλ¨Έμ§ κ³΅ν΅ λΆκ° κΈ°λ₯λ€μ μ¬μ΄λμΉ΄ 컨ν μ΄λλ₯Ό μΆκ°ν΄μ μ¬μ©
- 컨ν μ΄λμ μ¬μ¬μ©μ±μ λμΌ μ μμ
# μ°λ°°μλ ν¨ν΄(Ambassador)
- νλ μμμ νλ‘μ μν μ νλ 컨ν μ΄λλ₯Ό μΆκ°νλ ν¨ν΄
- νλ μμμ μΈλΆ μλ²μ μ κ·Όν λ λ΄λΆ νλ‘μμ μ κ·Όνλλ‘ μ€μ νκ³ μ€μ μΈλΆμμ μ°κ²°μ νλ‘μμμ μμμ μ²λ¦¬
# μ΄λν° ν¨ν΄(Adapter)
- νλ μΈλΆλ‘ λ ΈμΆλλ μ 보λ₯Ό νμ€ννλ μ΄λν° μ»¨ν μ΄λλ₯Ό μ¬μ©νλ€λ λ»
- μ΄λν° μ»¨ν μ΄λλ‘ νλμ λͺ¨λν°λ§ μ§νλ₯Ό νμ€νν νμμΌλ‘ λ ΈμΆμν€κ³ , μΈλΆμ λͺ¨λν°λ§ μμ€ν μμ ν΄λΉ λ°μ΄ν°λ₯Ό μ£ΌκΈ°μ μΌλ‘ κ°μ Έκ°μ λͺ¨λν°λ§νλλ° μ΄μ©
- μ€ν μμ€ λͺ¨λν°λ§ μμ€ν μΈ νλ‘λ©ν μ°μ€μμλ μ¬μ©
# Referenses
- μΏ λ²λ€ν°μ€ μ λ¬Έ - 90κ°μ§ μμ λ‘ λ°°μ°λ 컨ν μ΄λ κ΄λ¦¬ μλν νμ€ / λμλΆμ€